home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-16 | 4.9 KB | 165 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: PRCursor.cpp
- // Release Version: $ ODF 1 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "FWOS.hpp"
-
- #ifndef PRCURSOR_H
- #include "PRCursor.h"
- #endif
-
- #ifndef FWPRIDEB_H
- #include "FWPriDeb.h"
- #endif
-
- #ifndef FWRESOUR_H
- #include "FWResour.h"
- #endif
-
- #if defined(FW_BUILD_MAC) && !defined(__RESOURCES__)
- #include <Resources.h>
- #endif
-
- #if defined(FW_BUILD_MAC) && !defined(__TOOLUTILS__)
- #include <ToolUtils.h>
- #endif
-
- #if defined(FW_BUILD_MAC) && !defined(__LOWMEM__)
- #include <LowMem.h>
- #endif
-
- #ifndef SOM_Module_OpenDoc_Errors_defined
- #include <ErrorDef.xh>
- #endif
-
- //========================================================================================
- // Runtime Informations
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment fwtoolbx
- #endif
-
- //========================================================================================
- // Cursor API
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_PrivLoadSystemCursor
- //----------------------------------------------------------------------------------------
-
- static FW_PlatformCursorHandle FW_PrivLoadSystemCursor(Environment* ev, FW_CursorID cursorID, FW_Boolean& isMacColorCursor)
- {
- FW_PlatformCursorID platformCursorID = (FW_PlatformCursorID) (cursorID & FW_kCursorIDMask);
-
- // do not use the resource component because we're loading from the system
- FW_PlatformCursorHandle cursorHandle = NULL;
- isMacColorCursor = FALSE;
-
- #ifdef FW_BUILD_MAC
- // try a mono cursor first
- cursorHandle = ::GetCursor(platformCursorID);
-
- if (cursorHandle == NULL)
- {
- // no mono cursor, try a color cursor
- cursorHandle = (FW_PlatformCursorHandle) ::GetCCursor(platformCursorID);
- isMacColorCursor = TRUE;
- }
-
- if (cursorHandle != NULL)
- {
- // ----- We need to detache the resource because of CFM -----
- ::DetachResource((FW_PlatformHandle)cursorHandle);
- ::HNoPurge((FW_PlatformHandle)cursorHandle); // The resource may have been tagged purgeable
- }
- #endif
-
- #ifdef FW_BUILD_WIN
- cursorHandle = ::LoadCursor(NULL, platformCursorID);
- #endif
-
- if (cursorHandle == NULL)
- FW_SetEvError(ev, FW_xResourceNotFound);
-
- return cursorHandle;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_PrivLoadUserCursor
- //----------------------------------------------------------------------------------------
-
- static FW_PlatformCursorHandle FW_PrivLoadUserCursor(Environment* ev, FW_Instance instance, FW_CursorID cursorID, FW_Boolean& isMacColorCursor)
- {
- FW_ASSERT(instance != NULL);
-
- FW_PlatformCursorID platformCursorID = (FW_PlatformCursorID) (cursorID & FW_kCursorIDMask);
-
- FW_PlatformCursorHandle cursorHandle = NULL;
- FW_VOLATILE(cursorHandle);
-
- isMacColorCursor = FALSE;
-
- FW_TRY
- {
- FW_CSharedLibraryResourceFile resourceFile(ev, instance);
-
- #ifdef FW_BUILD_MAC
- if(resourceFile->PrivHasSpecialResource(ev, platformCursorID, FW_kCursor))
- {
- isMacColorCursor = TRUE;
- cursorHandle = (FW_PlatformCursorHandle)resourceFile->PrivGetSpecialResource(ev, platformCursorID, FW_kCursor);
- }
- else
- {
- isMacColorCursor = FALSE;
- cursorHandle = (FW_PlatformCursorHandle)resourceFile->PrivGetSpecialResource(ev, platformCursorID, FW_kBlackWhiteCursor);
- }
-
- // ----- We need to detache the resource because of CFM -----
- ::DetachResource((FW_PlatformHandle)cursorHandle);
- ::HNoPurge((FW_PlatformHandle)cursorHandle); // The resource may have been tagged purgeable
- #endif
-
- #ifdef FW_BUILD_WIN
- cursorHandle = (FW_PlatformCursorHandle)resourceFile->PrivGetSpecialResource(ev, (unsigned short) (unsigned long) platformCursorID, FW_kCursor);
- #endif
- }
- FW_CATCH_BEGIN
- FW_CATCH_REFERENCE(FW_XException, exception)
- {
- FW_SetException(ev, exception);
- }
- FW_CATCH_EVERYTHING ()
- {
- FW_SetEvError(ev, kODErrUndefined);
- }
- FW_CATCH_END
-
- return cursorHandle;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_PrivLoadCursor
- //----------------------------------------------------------------------------------------
-
- FW_PlatformCursorHandle SL_API FW_PrivLoadCursor(Environment* ev, FW_Instance instance, FW_CursorID cursorID, FW_Boolean& isMacColorCursor)
- {
- // No try block necessary - Do not throw
- // Note: a NULL handle is returned on failure.
-
- if ((cursorID & FW_kCursorMask) == FW_kSystemCursor)
- return FW_PrivLoadSystemCursor(ev, cursorID, isMacColorCursor);
- else if ((cursorID & FW_kCursorMask) == FW_kODFCursor)
- return FW_PrivLoadUserCursor(ev, FW_gInstance, cursorID, isMacColorCursor);
- else
- return FW_PrivLoadUserCursor(ev, instance, cursorID, isMacColorCursor);
- }
-
-
-